//package com.tjetc.utils;
//
//import com.fasterxml.jackson.databind.ObjectMapper;
//import com.tjetc.config.ApplicationContextProvider;
//import com.tjetc.domain.ChatHistory;
//import com.tjetc.service.ChatHistoryService;
//import com.tjetc.vo.Message;
//import com.tjetc.vo.Result;
//import jakarta.json.Json;
//import jakarta.json.JsonArrayBuilder;
//import jakarta.json.JsonObject;
//import jakarta.websocket.*;
//import jakarta.websocket.server.PathParam;
//import jakarta.websocket.server.ServerEndpoint;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.context.ApplicationContext;
//import org.springframework.stereotype.Component;
//
//import java.io.IOException;
//import java.util.Date;
//import java.util.Map;
//import java.util.concurrent.ConcurrentHashMap;
//import java.util.concurrent.CopyOnWriteArraySet;
//
//@ServerEndpoint("/websocket/{id}")
//@Component
//public class WebSocketTest {
//
//	// 存储所有客户端连接
//	private static CopyOnWriteArraySet<WebSocketTest> webSocketSet = new CopyOnWriteArraySet<>();
//
//	// 用户ID映射表
//	private static Map<String, WebSocketTest> userMap = new ConcurrentHashMap<>();
//
//	// 连接会话
//	private Session session;
//	// 客户端唯一标识
//	private String clientname;
//
//	// 注入ChatHistoryService
//	private static ChatHistoryService chatHistoryService;
//
//	@Autowired
//	public void setChatHistoryService(ChatHistoryService chatHistoryService) {
//		WebSocketTest.chatHistoryService = chatHistoryService;
//	}
//
//	/**
//	 * 获取ChatHistoryService实例
//	 */
//	private ChatHistoryService getChatHistoryService() {
//		if (chatHistoryService == null) {
//			System.out.println("尝试从ApplicationContext获取ChatHistoryService...");
//			ApplicationContext applicationContext = ApplicationContextProvider.getApplicationContext();
//			if (applicationContext != null) {
//				System.out.println("ApplicationContext获取成功: " + applicationContext);
//				try {
//					// 尝试获取ChatHistoryService
//					chatHistoryService = applicationContext.getBean(ChatHistoryService.class);
//					System.out.println("ChatHistoryService获取成功: " + chatHistoryService);
//
//					// 测试ChatHistoryService是否正常工作
//					testChatHistoryService();
//				} catch (Exception e) {
//					System.out.println("获取ChatHistoryService失败: " + e.getMessage());
//					e.printStackTrace();
//
//					// 尝试获取所有可用的bean名称
//					try {
//						String[] beanNames = applicationContext.getBeanDefinitionNames();
//						System.out.println("可用的Bean数量: " + beanNames.length);
//						for (String beanName : beanNames) {
//							if (beanName.toLowerCase().contains("chat") || beanName.toLowerCase().contains("history")) {
//								System.out.println("找到相关Bean: " + beanName);
//							}
//						}
//					} catch (Exception ex) {
//						System.out.println("无法获取Bean列表: " + ex.getMessage());
//					}
//				}
//			} else {
//				System.out.println("ApplicationContext为null，无法获取ChatHistoryService");
//			}
//		}
//		return chatHistoryService;
//	}
//
//	/**
//	 * 测试ChatHistoryService是否正常工作
//	 */
//	private void testChatHistoryService() {
//		try {
//			ChatHistory testHistory = new ChatHistory();
//			testHistory.setContent("测试消息");
//			testHistory.setDate(new Date());
//			testHistory.setSenderId(1);
//			testHistory.setRead(false);
//
//			Result result = chatHistoryService.add(testHistory);
//			System.out.println("ChatHistoryService测试成功，插入结果: " + result.getCode());
//		} catch (Exception e) {
//			System.out.println("ChatHistoryService测试失败: " + e.getMessage());
//			e.printStackTrace();
//		}
//	}
//
//	/**
//	 * 连接建立成功调用的方法
//	 */
//	@OnOpen
//	public void onOpen(Session session,@PathParam("id") String id) {
//		this.session = session;
//		this.clientname = id;
//
//		webSocketSet.add(this);
//		// 验证ChatHistoryService是否可用
//		ChatHistoryService service = getChatHistoryService();
//		if (service != null) {
//			System.out.println("ChatHistoryService验证成功，可以正常保存消息");
//		} else {
//			System.out.println("警告：ChatHistoryService不可用，消息将无法保存到数据库");
//		}
//		try {
//			// 发送欢迎消息
//			JsonObject welcomeMsg = Json.createObjectBuilder()
//					.add("type", "welcome")
//					.add("clientId", clientname)
//					.build();
//			this.session.getBasicRemote().sendText(welcomeMsg.toString());
//
//			// 广播用户/管理员列表
//			broadcastUserList();
//		} catch (IOException e) {
//			e.printStackTrace();
//		}
//	}
//
//	/**
//	 * 连接关闭调用的方法
//	 */
//	@OnClose
//	public void onClose() {
//		webSocketSet.remove(this);
//
//			userMap.remove(clientname);
//			System.out.println("用户 " + clientname + " 已断开连接");
//
//
//		// 广播更新后的列表
//		broadcastUserList();
//	}
//
//	/**
//	 * 收到客户端消息后调用的方法
//	 */
//	@OnMessage
//	public void onMessage(String message, Session session) throws IOException {
//		try {
//			ObjectMapper objectMapper = new ObjectMapper();
//			Message messageObj = objectMapper.readValue(message, Message.class);
//
//			if ("message".equals(messageObj.getType())) {
//				String from = messageObj.getFrom();
//				String to = messageObj.getTo();
//				String content = messageObj.getContent();
//				// 构建消息对象
//				JsonObject messageJson = Json.createObjectBuilder()
//						.add("type", "message")
//						.add("from", from)
//						.add("to", to)
//						.add("content", content)
//						.add("timestamp", System.currentTimeMillis())
//						.build();
//				String messageStr = messageJson.toString();
//				System.out.println("messageStr"+messageStr);
//				// 存储消息到数据库
//				saveMessageToDatabase(from, to, content);
//				WebSocketTest user = userMap.get(to);
//				if (user != null) {
//					user.session.getBasicRemote().sendText(messageStr);
//				}
//				// 发送给发送者（确认消息已发送）
//					this.session.getBasicRemote().sendText(messageStr);
//
//			}
//		} catch (Exception e) {
//			System.out.println("消息解析错误: " + e.getMessage());
//			e.printStackTrace();
//		}
//	}
//
//	/**
//	 * 保存消息到数据库
//	 */
//	private void saveMessageToDatabase(String from, String to, String content) {
//		try {
//			ChatHistoryService service = getChatHistoryService();
//			if (service != null) {
//				ChatHistory chatHistory = new ChatHistory();
//				chatHistory.setContent(content);
//				chatHistory.setDate(new Date());
//
//
//					chatHistory.setSenderId(Integer.parseInt(from));
//					chatHistory.setReceiverId(Integer.parseInt(to));
//					chatHistory.setRead(true);
//
//
//				chatHistoryService.add(chatHistory);
//
//				Result result = service.add(chatHistory);
//				if (result .getCode()==200) {
//					System.out.println("消息已保存到ES和数据库: " + content);
//				} else {
//					System.out.println("消息保存失败: " + content);
//				}
//			} else {
//				System.out.println("ChatHistoryService未注入，无法保存消息");
//			}
//		} catch (Exception e) {
//			System.out.println("保存消息到数据库时发生错误: " + e.getMessage());
//			e.printStackTrace();
//		}
//	}
//
//	/**
//	 * 广播在线用户列表
//	 */
//	private void broadcastUserList() {
//			JsonArrayBuilder usersArray = Json.createArrayBuilder();
//			for (Map.Entry<String, WebSocketTest> entry : userMap.entrySet()) {
//				JsonObject user = Json.createObjectBuilder()
//						.add("id", entry.getKey())
//						.build();
//				usersArray.add(user);
//			}
//
//			JsonObject userListMsg = Json.createObjectBuilder()
//					.add("type", "userList")
//					.add("users", usersArray)
//					.build();
//				broadcastToUsers(userListMsg.toString());
//
//		}
//	private void broadcastToUsers(String message) {
//		for (WebSocketTest user : userMap.values()) {
//			try {
//				user.session.getBasicRemote().sendText(message);
//			} catch (IOException e) {
//				e.printStackTrace();
//			}
//		}
//	}
//		/**
//		 * 发生错误时调用
//		 */
//		@OnError
//		public void onError(Session session, Throwable error) {
//			System.out.println("客户端 " + this.clientname + " 发生错误");
//			error.printStackTrace();
//	}
//}
